#ifndef __CE_GFX_LIGHT_H__
#define __CE_GFX_LIGHT_H__

#include <export.h>
#include <gfx/enum.h>
#include <gfx/iprogram.h>
#include <math/color.h>
#include <math/vector.h>

/**
 * \addtogroup graphics
 * @{
 */

/**
 * @brief Struct holding the data for a light source.
 */
class CE_API ceLight
{
private:
	ceVector4f				_position;
	ceVector3f				_attenuation;
	float							_range;
	ceLightRangeMode  _rangeMode;
	ceColor4f					_ambient;
	ceColor4f					_diffuse;
	ceColor4f					_specular;
	ceLightType				_lightType;

public:

	ceLight ();

	void SetPosition (const ceVector3f& position);
	const ceVector3f& GetPosition () const;

	void SetDirection (const ceVector3f& direction);
	const ceVector3f& GetDirection () const;

	ceLightType GetLightType () const;

	void SetRange (float range);
	float GetRange () const;

	void SetRangeMode (ceLightRangeMode mode);
	ceLightRangeMode GetRangeMode () const;

	void SetAmbient (const ceColor4f& ambient);
	const ceColor4f& GetAmbient () const;

	void SetDiffuse(const ceColor4f& diffuse);
	const ceColor4f& GetDiffuse () const;

	void SetSpecular(const ceColor4f& specular);
	const ceColor4f& GetSpecular() const;


	void Bind (iProgram* program);


};

/** @} */

#endif /*! __CE_GFX_LIGHT_H__ */

